﻿/**
 * @file guild_repository_logic.h
 * @date 2021/06/15 19:32
 *
 * @author harrybao (harrybao@123u.com)
 *
 * @brief 公会仓库模块逻辑
 *
 * @version v1.0.0
 *
 * @copyright Copyright © 2021 All Rights Reserved 上海欢乐互娱网络科技有限公司
 *
 * @par history:
 * <table>
 * <tr><th>Date                     <th>Version     <th>Author <th>Description
 * <tr><td>2021/06/15 19:32         <td>1.0.0       <td>harrybao
 * <td>创建初始版本
 * </table>
 */


#pragma once

#include <vector>
#include "error/error_code.h"
#include "guild/guild.h"
#include "guildservicewelfare.enum.h"

struct GuildModuleRepository;

namespace guild_service {

/**
 * @brief 公会仓库模块逻辑类
 *
 */
class GuildModuleRepositoryLogic {
 public:
   /**
    * @brief 获取公会仓库模块
    *
    * @param guild_id 公会id
    * @param GuildRedEnvelope& module_repository 公会红包模块
    * @return 获取结果
    */
  static bool GetModuleRepository(const guild_id_type guild_id,
                                   GuildModuleRepository &module_repository);

public:
  static bool InitSetTimer();

  public:
  /**
   * @brief 设置拍卖道具出价
   *
   * @param role_uuid 角色唯一id
   * @param item_uuid 道具唯一id
   * @param offer 出价
   * @param old_price 原先出价
   * @param ec 错误码
   * @return 执行结果
   */
 static bool SetGuildAuctionOffer(const role_uuid_type role_uuid,
                                   const uint64_t item_uuid,
                                   const uint32_t offer, uint32_t &old_offer,
                                   error_code &ec);
  /**
   * @brief 关注拍卖道具
   * 
   * @param role_uuid 角色唯一id
   * @param item_uuid 道具唯一id
   * @param is_attention 是否关注
   * @param ec 错误码
   * @return 执行结果
   */
  static bool SetGuildAuctionAttention(
      const role_uuid_type role_uuid, const uint64_t item_uuid, bool is_attention,
      error_code &ec);

  /**
   * @brief 添加仓库道具
   * 
   * @param role_uuid 角色唯一id
   * @param item_id 道具id
   * @param ec 错误码
   * @return true 添加成功
   * @return false 添加失败
   */
  static bool AddGuildRepositoryCellItem(const role_uuid_type role_uuid,
                                         const uint32_t item_id,
                                         error_code &ec);

  /**
   * @brief 删除仓库道具
   * 
   * @param role_uuid 角色唯一id
   * @param item_uuid 道具唯一id
   * @param ec 错误码
   * @return true 删除成功
   * @return false 删除失败
   */
  static bool DelGuildRepositoryCellItem(const role_uuid_type role_uuid,
                                         const uint64_t item_uuid,
                                         error_code &ec);
private:
  using duty_type = guildservicewelfare_cpp::GuildDuty;  ///< 公会成员职责类型
  /**
   * @brief 检查公会成员职责
   *
   * @param role_uuid 角色唯一id
   * @param guild_id 公会id
   * @param duty_list 职责列表
   * @return true 满足职责
   * @return false 不满足职责
   */
  static bool CheckMemberDuty(const role_uuid_type role_uuid,
                       const guild_id_type guild_id,
                       const std::vector<duty_type> &duty_list);
};

}  // namespace guild_service
